package 力扣.栈;

import java.util.Deque;
import java.util.LinkedList;

public class 最小栈155 {
    public static void main(String[] args) {
        MinStack minStack = new MinStack();
    }
}

/**  栈的插入和删除使用元素栈内部API即可。
 *  寻找最小值：多申请一个辅助栈 ‘minStack’ 与元素栈同步插入与删除，用于存储与每个元素对应的最小值，
 *           这样返回最小值时只需要返回辅助栈中的元素即可。
 */
class MinStack {
    Deque<Integer> xStack;
    Deque<Integer> minStack;

    public MinStack() {
         xStack = new LinkedList<>();
         minStack = new LinkedList<>();
         minStack.push(Integer.MAX_VALUE);
    }

    public void push(int x) {
          xStack.push(x);
          minStack.push(Math.min(minStack.peek(), x));
    }

    public void pop() {
          xStack.pop();
          minStack.pop();
    }

    public int top() {
         return xStack.peek();
    }

    public int getMin() {
         return minStack.peek();
    }
}
